#include <iostream>
using namespace std;

// 定义一个空的类模板
template <typename T>
class myfunction {};

// 将这个类模板部分特例化 返回值R，参数A
template <typename R, typename... A>
class myfunction<R(A...)>
{
public:
    // 定义一个函数指针类型
    using PFUNC = R(*)(A...);
    // 构造函数
    myfunction(const PFUNC& func):_pfunc(func) {}
    // 定义一个小括号运算符重载函数
    R operator()(A... arg) const
    {
        return this->_pfunc(arg...);
    }

private:
    PFUNC _pfunc;
};

int sum(int a, int b, int c) { return a + b + c; }
int main(int argc, char const *argv[])
{
    myfunction<int(int,int,int)> func1 = sum;
    cout << func1(10, 20, 30) << endl;
    return 0;
}
